// "Copyright [2021] <Copyright Han>"
#ifndef OPTICALPATHMANAGER_H_
#define OPTICALPATHMANAGER_H_

#include <vector>
#include <unordered_map>

#include "path_manager.h"


namespace ai_sim {

class OpticalPathManager : public PathManager {
  public:
    OpticalPathManager() {}
    void AddPath(EndComponentId src, EndComponentId dst,
                 const Path& path) override;
    void RemovePath(EndComponentId src, EndComponentId dst) override {}

  private:
    // record whether a port is occupied by some job
    std::unordered_map<DeviceId, std::unordered_map<int, int> > occupied_inport_to_outport_map_;
    std::unordered_map<DeviceId, std::unordered_map<int, int> > occupied_outport_to_inport_map_;
};

}  // namespace ai_sim

#endif  // #define OPTICALPATHMANAGER_H_
